levelbar: Chainup to parent buildable when handling custom tags
authorStefano Facchini <stefano.facchini@gmail.com>
Mon, 6 Jul 2020 19:23:43 +0000 (21:23 +0200)
committerStefano Facchini <stefano.facchini@gmail.com>
Tue, 7 Jul 2020 07:34:00 +0000 (09:34 +0200)
This is necessary to handle <layout> tags.

gtk/gtklevelbar.c

index b879494f6537437b71492d4315b194a33bde1650..321c152128a4194d5fcb5c7b12e75991924e8ba3 100644 (file)
@@ -725,6 +725,8 @@ static const GtkBuildableParser offset_parser =
   offset_start_element
 };
 
+static GtkBuildableIface *parent_buildable_iface;
+
 static gboolean
 gtk_level_bar_buildable_custom_tag_start (GtkBuildable       *buildable,
                                           GtkBuilder         *builder,
@@ -735,6 +737,10 @@ gtk_level_bar_buildable_custom_tag_start (GtkBuildable       *buildable,
 {
   OffsetsParserData *data;
 
+  if (parent_buildable_iface->custom_tag_start (buildable, builder, child,
+                                                tagname, parser, parser_data))
+    return TRUE;
+
   if (child)
     return FALSE;
 
@@ -767,7 +773,11 @@ gtk_level_bar_buildable_custom_finished (GtkBuildable *buildable,
   self = data->self;
 
   if (strcmp (tagname, "offsets") != 0)
-    goto out;
+    {
+      parent_buildable_iface->custom_finished (buildable, builder, child,
+                                               tagname, user_data);
+      return;
+    }
 
   for (l = data->offsets; l != NULL; l = l->next)
     {
@@ -775,7 +785,6 @@ gtk_level_bar_buildable_custom_finished (GtkBuildable *buildable,
       gtk_level_bar_add_offset_value (self, offset->name, offset->value);
     }
 
- out:
   g_list_free_full (data->offsets, (GDestroyNotify) gtk_level_bar_offset_free);
   g_slice_free (OffsetsParserData, data);
 }
@@ -783,6 +792,8 @@ gtk_level_bar_buildable_custom_finished (GtkBuildable *buildable,
 static void
 gtk_level_bar_buildable_init (GtkBuildableIface *iface)
 {
+  parent_buildable_iface = g_type_interface_peek_parent (iface);
+
   iface->custom_tag_start = gtk_level_bar_buildable_custom_tag_start;
   iface->custom_finished = gtk_level_bar_buildable_custom_finished;
 }